home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
intr.arc
/
INTR.ASM
next >
Wrap
Assembly Source File
|
1986-01-14
|
2KB
|
84 lines
DATA SEGMENT PUBLIC 'DATA'
; PUBLIC AND EXTERN DATA
; DECLORATIONS GO HERE
DATA ENDS
DGROUP GROUP DATA
ASSUME CS: INTRS , DS : DGROUP , SS : DGROUP
INTRS SEGMENT 'CODE'
PUBLIC INTR
INTR PROC FAR
PUSH BP ; SAVE OLD FRAME POINTER
MOV BP,SP ; GET FRAME POINTER
PUSH DS ; SAVE DATA SEG REG
PUSH CS
POP DS ; MAKE THIS CODE ADDRESSABLE
MOV AX,10[BP] ; GET INTERUPT VALUE
MOV SI,OFFSET CS:INT_INS+1 ; SET INTERUPT INSTRUCTION
MOV CS:[SI],AL
MOV SI,6[BP] ; GET REG PACK OFFSET
MOV AX,8[BP] ; GET REG PACK SEGMENT
MOV DS,AX ; MAKE REG PACK ADDRESSABLE
MOV CS:REG_PACK_DS,AX ; SAVE REG PACK SEG
MOV CS:REG_PACK_OFF,SI ; SAVE REG PACK OFFSET
;------------------- PUSH USER REGS ------------------------------
PUSH 12H[SI]
PUSH 10H[SI]
PUSH 0EH[SI]
PUSH 0CH[SI]
PUSH 0AH[SI]
PUSH 08H[SI]
PUSH 06H[SI]
PUSH 04H[SI]
PUSH 02H[SI]
PUSH [SI]
;----------------- APPLICATION ----------------------------------------
; SET UP REGISTERS AS REQUIRED FOR INTERUPT INSTRUCTION
POP AX
POP BX
POP CX
POP DX
POP BP
POP SI
POP DI
POP DS
POP ES
POPF
INT_INS: INT 10H ; DUMMY INT WILL BE REPLACE WHEN EXECUTED
; SAVE RETURNED REGISTER VALUES
PUSHF
PUSH ES
PUSH DS
PUSH DI
PUSH SI
PUSH BP
PUSH DX
PUSH CX
PUSH BX
PUSH AX
; POP INTERUPT REGISTERS BACK TO THEIR HOME
PUSH CS
POP DS
MOV AX,CS:REG_PACK_DS ; SAVE REG PACK SEG
MOV SI,CS:REG_PACK_OFF ; SAVE REG PACK OFFSET
MOV DS,AX ; MAKE REG PACK ADDRESSABLE AGAIN
POP [SI]
POP 02H[SI]
POP 04H[SI]
POP 06H[SI]
POP 08H[SI]
POP 0AH[SI]
POP 0CH[SI]
POP 0EH[SI]
POP 10H[SI]
POP 12H[SI]
;----------------- END APP --------------------------------------------
POP DS ; RESTORE OLD DATA SEGMENT
POP BP ; RESTORE BASE POINTER REGISTER
RET 6 ; RETURN POP FOUR BYTES
INTR ENDP
REG_PACK_DS DW ?
REG_PACK_OFF DW ?
INTRS ENDS
END